今天應該是紀錄坑的最後一篇了,感謝雷雷同事貢獻他遇到的坑給我記錄XD
有時候我們會有將程式移植到嵌入式系統上面的需求,因為ros本來就是拿來做機器人的嘛!
但是嵌入式如樹梅派、nvidia TX系列,使用的都是ARM架構,因此誕生了需要cross compile的需求囉! cross complie可以節省編譯時間,同時避免原始碼散落在機器之上,所以來記錄一下如何進行吧!
本篇文章參考此篇教學做出來的,然而最後的成果並沒有支援qt cross compile,所以有些GUI出不來,留待後期遇到了需要解決再來解決吧XD
本機跟樹梅派皆使用ubuntu 16.04 ROS Kinetic,首先要安裝cross compiler toolchain,先確定樹梅派的arm架構是armhf($ dpkg --print-architecture
),之後就可以安裝相關的套件:
$ sudo apt install lib32z1-dev
$ sudo apt install gcc-arm-linux-gnueabihf
$ sudo apt install g++-arm-linux-gnueabihf
接下來創一個workspace和package,並且把/opt/ros/kinetic內的資料夾全部複製到workspace底下的package中。注意這邊若是使用sftp或scp,會有些軟連結失效,這邊需要確保全部的檔案都完全複製並放在package中。
接下來是個很麻煩的步驟,因為從/opt/ros/kinetic資料夾撈出來的檔案內的cmake路徑都是絕對路徑,因此要把這些絕對路徑改掉:
/opt/ros/kinetic -> [package路徑]
這個步驟之所以麻煩是因為要進到每個檔案內修改CMAKE_PREFIX_PATH
和CATKIN_ENV_HOOK_WORKSPACE
,但是可以利用IDE進行一鍵修改(VS CODE讚啦)
接下來進入系統lib的部分了,需要把/usr/include
和/usr/lib/arm-linux-gnueabihf
內的東西加進來,就可以下catkin_make囉!
然後就會開始遇到有些package build不過的問題,通常是因為路徑沒接到而發生的,就de一下就好囉XD
雷雷同事說我發文都不附圖太難讓人看懂了,因此筆者決定明天來截圖補上~~~